跳到主要内容

JZ24 二叉树中和为某一值的路径

https://www.nowcoder.com/practice/b736e784e3e34731af99065031301bca

这题也是挺难的,主要是掌握这个 temp 数组的使用,以及在左右两边都为空时遍历到底

import java.util.ArrayList;
import java.util.HashMap;

/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;

public TreeNode(int val) {
this.val = val;

}

}
*/
public class Solution {
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
dfs(root, target);
return ans;
}

final ArrayList<ArrayList<Integer>> ans = new ArrayList<>();
// dfs 记忆功能关键就是对这个 temp 的理解,它表示 “一条路” 上的所有节点
final ArrayList<Integer> temp = new ArrayList<>();

// 关键理解就是 dfs 的递归过程,每次递归都是到同一个方向的最后一个节点,
// 它并不是 “同时进行” 的!!
// 所以每次只需考虑同一条路径上的节点
void dfs(TreeNode root,int target) {
if (root == null) return;

// 每次都得把当前节点丢进 temp
temp.add(root.val);

// 当根节点等于最后一个值时表示当前找到的这条路径是满足条件的
if (root.right == null &&
root.left == null &&
root.val == target) {

ans.add(new ArrayList<Integer>(temp));
}

dfs(root.left, target - root.val);
dfs(root.right, target - root.val);
// 在归的时候,移除当前 temp 最后一个节点(表示移除当前节点)
temp.remove(temp.size() - 1);
}
}